home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NeXTSTEP 3.1 (Developer) [x86]
/
NeXT Step 3.1 Intel dev.cdr.dmg
/
NextDeveloper
/
Examples
/
AppKit
/
Graph
/
RotatorCamera.m
< prev
next >
Wrap
Text File
|
1992-06-21
|
2KB
|
54 lines
/*
RotatorCamera.m
RotatorCamera is an N3DCamera that tracks the mouse to rotate the
contents of the camera using a N3DRotator.
You may freely copy, distribute, and reuse the code in this example.
NeXT disclaims any warranty of any kind, expressed or implied, as to its
fitness for any particular use.
*/
#import "Graph.h"
#define MOUSE_MASK (NX_LMOUSEDOWNMASK|NX_LMOUSEDRAGGEDMASK|NX_LMOUSEUPMASK)
@implementation RotatorCamera
/*
* As we track the mouse, we use a N3DRotator object to calculate the new
* viewing transforms, and then apply those to the camera's world shape.
* If our window's delegate is interested, we notify it that we've changed
* the document.
*/
- mouseDown:(NXEvent *)event {
N3DRotator *rotator = [[N3DRotator allocFromZone:[self zone]] initWithCamera:self];
RtMatrix rotationXForm;
RtMatrix inverseRotationXForm;
NXEvent newEvent;
NXPoint oldLocation, newLocation;
oldLocation = event->location;
[self convertPoint:&oldLocation fromView:nil];
[window addToEventMask:NX_LMOUSEDRAGGEDMASK];
do {
newEvent = *[NXApp getNextEvent:MOUSE_MASK];
newLocation = newEvent.location;
[self convertPoint:&newLocation fromView:nil];
if (oldLocation.x != newLocation.x || oldLocation.y != newLocation.y) {
[rotator trackMouseFrom:&oldLocation to:&newLocation
rotationMatrix:rotationXForm andInverse:inverseRotationXForm];
[worldShape concatTransformMatrix:rotationXForm premultiply:NO];
[self display];
if ([[window delegate] respondsTo:@selector(docChanged)])
[[window delegate] docChanged];
}
oldLocation = newLocation;
} while (newEvent.type != NX_LMOUSEDOWN && newEvent.type != NX_LMOUSEUP);
[rotator free];
return self;
}
@end